"""
文件工具模块
提供文件保存和路径管理功能
"""

import os
from pathlib import Path
from typing import Optional


class FileUtils:
    """文件工具类"""
    
    @staticmethod
    def ensure_directory(directory: str) -> bool:
        """
        确保目录存在，如果不存在则创建
        
        Args:
            directory (str): 目录路径
            
        Returns:
            bool: 目录是否成功创建或已存在
        """
        try:
            Path(directory).mkdir(parents=True, exist_ok=True)
            return True
        except Exception:
            return False
    
    @staticmethod
    def get_unique_filename(directory: str, filename: str) -> str:
        """
        获取唯一的文件名，如果文件已存在则添加序号
        
        Args:
            directory (str): 保存目录
            filename (str): 原始文件名
            
        Returns:
            str: 唯一的文件名
        """
        base_name, extension = os.path.splitext(filename)
        counter = 1
        
        while True:
            new_filename = f"{base_name}_{counter}{extension}" if counter > 1 else filename
            full_path = os.path.join(directory, new_filename)
            
            if not os.path.exists(full_path):
                return new_filename
            counter += 1
    
    @staticmethod
    def get_safe_filename(name: str) -> str:
        """
        获取安全的文件名（移除非法字符）
        
        Args:
            name (str): 原始名称
            
        Returns:
            str: 安全的文件名
        """
        # Windows文件名非法字符
        illegal_chars = '<>:"/\\|?*'
        safe_name = name
        
        for char in illegal_chars:
            safe_name = safe_name.replace(char, '_')
            
        return safe_name
    
    @staticmethod
    def get_default_save_path() -> str:
        """
        获取默认保存路径
        
        Returns:
            str: 默认保存路径
        """
        current_dir = Path(__file__).parent.parent.parent
        save_dir = current_dir / "downloads"
        return str(save_dir)
    
    @staticmethod
    def get_file_extension(format_name: str) -> str:
        """
        根据格式名称获取文件扩展名
        
        Args:
            format_name (str): 格式名称（如 PNG, JPEG）
            
        Returns:
            str: 文件扩展名
        """
        format_map = {
            "PNG": ".png",
            "JPEG": ".jpg",
            "BMP": ".bmp",
            "TIFF": ".tiff"
        }
        return format_map.get(format_name.upper(), ".png")
    
    @staticmethod
    def is_valid_path(path: str) -> bool:
        """
        检查路径是否有效
        
        Args:
            path (str): 路径字符串
            
        Returns:
            bool: 路径是否有效
        """
        try:
            Path(path)
            return True
        except Exception:
            return False